#include <iostream>
using namespace std;
#include <cstdlib>

/*
	动态内存分配:
		1G内核
		3G用户
			环境变量、命令行存储区
			栈
			共享内存映射区
			堆
			数据段(bbs) 	
				常量区
				静态存储区
					初始化
					非初始化
			代码段

	堆：
		手动申请并手动释放
		malloc calloc realloc
		free

		new new[]		申请
		delete delte[]	释放

		1 new和delete配对使用  不能混合C中库函数
		2 new和delete是关键字  malloc calloc realloc free 库函数
		3 C的库函数只是单纯的空间申请和释放，但是C++的new delete申请空间空间的同时
		伴随着构造和析构的调用.
*/

class Ex{
public:
	Ex(){ cout << "Ex" << endl; }
	~Ex() { cout << "~Ex" << endl; }
};

int main(void)
{
	//Ex* p = (Ex*)malloc(sizeof(Ex));

	//free(p);

	Ex* p = new Ex();
	delete p;
	Ex *ary_p = new Ex[10]();
	delete [] ary_p;

	return 0;
}


int main1(int argc, char **argv)
{
	int *p  = (int*)malloc(sizeof(int));

	*p = 100;
	cout << *p << endl;

	free(p);
	
	//int *pc = new int;	//申请不是化的过程
	//*pc = 100;
	//申请空间并初始化为100
	int *pc = new int(100);

	cout << *pc << endl;
	free(pc);

	

	return 0;
}


